home *** CD-ROM | disk | FTP | other *** search
/ Especial Multimedia / Especial Multimedia.iso / Multimed / Herra / TIMWIN.ZIP / COLUNIV.CMD < prev    next >
OS/2 REXX Batch file  |  1993-09-22  |  3KB  |  121 lines

  1. ;coluniv  --  universal colour image
  2. ; Usage:
  3. ;        *coluniv <dest.im> <basename> #red #green #blue
  4. ; dest.im.   image to put the result in
  5. ; basename   basename of colour image on disk, e.g. baboo
  6. ; #red, etc. number of levels per colour (e.g. 6, 7, 6)
  7. ;
  8. ; Expects: 
  9. ;   3 images on disk: <basename>r, <basename>g and <basename>b
  10. ;
  11. #define DITHER    1
  12. parms
  13.   file destim         ;1st. param: destination image
  14.   string target       ;2nd. param: basename of colour image (e.g. baboon)
  15.   int nred            ;number of levels for red
  16.   int ngreen          ;idem green
  17.   int nblue           ;idem blue
  18. endparms
  19. char tmp[100]         ;character array to assemble file names
  20. file img              ;image variable
  21. file klad = "a"       ;klad-image
  22. int colmode = PIX8    ;default colour mode
  23. int err
  24.  
  25. if (nred*ngreen*nblue) > 256
  26.   if ((((improp destim) & PIXMASK) == PIX12) || (((improp destim) & PIXMASK) == PIX16))
  27.     colmode = PIX12
  28.   else
  29.      print "Product of colour levels must be < 256"
  30.      stop 1
  31.   endif
  32. endif
  33.  
  34. if (nred == 1) || (ngreen == 1) || (nblue == 1)
  35.  colmode = DITHER
  36. endif
  37.  
  38. if ((improp destim) & DIS_BIT) == DIS_BIT
  39.   switch colmode
  40.     case DITHER
  41.       err = chk lut 2 6 5 6
  42.     case PIX12
  43.       err = chk lut 2 1 110 16 16 16
  44.     case PIX8
  45.       err = chk lut 2 6 10 nred ngreen nblue
  46.   endsw
  47. elseif ((improp destim) & WIN_BIT) == WIN_BIT
  48.   switch colmode
  49.     case DITHER
  50.       lut 3 1 5 6
  51.     case PIX8
  52.       lut 3 1 10 nred ngreen nblue
  53.     default
  54.       call error
  55.   endsw
  56. else
  57.   print "ILLEGAL IMAGE SPECIFIED"
  58.   beep
  59.   stop 1
  60. endif
  61.  
  62. dest klad                         ;tmp
  63. fprint tmp 0 "%s%s" target, "b"
  64. img = tmp
  65.  
  66. switch colmode       ;BLUE
  67.   case DITHER
  68.     dot img 
  69.     keep 8           ;keep the most significant bitplane
  70.   case PIX8
  71.     mul img nblue    ;get blue img, scale to 'nblue' levels
  72.   case PIX12
  73.     shr img 4        ;shifting down the 4 upper bitplanes into the lower
  74. endsw
  75. copy klad destim     ;the blue image is the lowest
  76.  
  77. fprint tmp 0 "%s%s" target, "g"
  78. img = tmp
  79.  
  80. switch colmode        ;GREEN
  81.   case DITHER
  82.     dot img
  83.     keep 7
  84.   case PIX8
  85.     mul img ngreen       ;get green img, scale to 'ngreen' levels
  86.     mul (nblue*256)      ;green is on to of blue
  87.   case PIX12
  88.     and img 0xf0         ;keep the 4 upper biplanes
  89. endsw
  90. ;add klad destim >destim
  91. add klad destim
  92. save destim
  93.  
  94. fprint tmp 0 "%s%s" target, "r"
  95. img = tmp
  96.  
  97. switch colmode            ;RED
  98.   case DITHER
  99.     dot img
  100.     keep 6
  101.     dest destim
  102.     add klad destim
  103.   case PIX8
  104.     mul img nred         ;get red img, scale to 'nred' levels
  105.     mul (nblue*ngreen*256) ;red is on top of blue and green
  106.     dest destim
  107.     add klad destim
  108.   case PIX12
  109.     shr img 4
  110.     ovl destim 2
  111.     save destim
  112.     ovl destim 0    
  113. endsw
  114.  
  115. stop 0
  116.  
  117. error:
  118.    beep
  119.    print "Illegal parameter combination"
  120. return
  121.